package org.jawa.exam;

import java.util.Collection;
import java.util.List;

import org.jawa.exam.model.Exam;

public interface ExamProvider {

	/**
	 * 创建考试信息.
	 * 
	 * @param Exam 考试信息.
	 * @return 创建好的考试信息实例.
	 * @throws Exception 创建考试信息异常.
	 */
	public Exam createExam(Exam exam) throws Exception;

	/**
	 * 删除考试信息。
	 * 
	 * @param ExamID
	 *            要删除考试信息的 ExamID.
	 * 
	 */
	public void deleteExam(Long examID);

	/**
	 * 返回总的考试信息数.
	 * 
	 * @return 总的考试信息数.
	 * 
	 */
	public int getExamCount();

	/**
	 * 返回系統中所有考试信息的 ExamId.
	 * 
	 * @return 不可以修改的系統中考试信息的 ExamId集合.
	 * 
	 */
	public Collection<Long> getExamIds();

	/**
	 * 返回所有的考试信息（考试信息集合）,{@link ExamCollection} 集合用于协助这个返回结果，他需要一个Long[] Examid
	 * 的数组，在实际需要数据的时候再{@link ExamManager#getExam()}进行查询实际数据.
	 * 
	 * @return 不可以修改的考试信息集合.
	 */
	public Collection<Exam> getExams();

	/**
	 * 返回所有的考试信息（考试信息集合）,{@link ExamCollection} 集合用于协助这个返回结果，他需要一个Long[] Examid
	 * 的数组，在实际需要数据的时候再{@link ExamManager#getExam()}进行查询实际数据.
	 * 
	 * @param startIndex
	 *            起始索引.
	 * @param numResults
	 *            要显示的考试信息数据数量.
	 * @return 不可以修改的考试信息集合.
	 * 
	 */
	public Collection<Exam> getExams(int startIndex, int numResults);

	/**
	 * 根据查询条件查询符合条件的的考试信息信息。
	 * 
	 * @param fieldQuerys
	 *            要查询的条件信息.
	 * 
	 * @return 查询到的考试信息信息结果.
	 * 
	 */
	public Collection<Exam> findExams(List<String> fields, List<String> querys);
	
	/**
	 * 根据考试信息编号获取对象
	 * @param examId 考试信息编号
	 * @return 返回获取的对象实例
	 */
	public Exam loadByExamId(Long examId);

}
